package busco

// @schema_export --ident=schema --json --config=功能
// @schema_go
// @cache_go
// @cache_ts
// @alias 功能
type B功能 struct {
	// 所有配置中的唯一的标识
	// 必须设置
	// @alias 标识
	B标识 string
	// @alias 名称
	M名称 string
	// @alias 描述
	M描述 string
	// @alias 标签
	// 用于查找或分类，例如用于标记成就系统，主线任务等
	B标签 map[string]string
	// @alias 标旗
	B标旗 map[G功能标旗]bool
	// @alias 登记条件
	// 登记需要的条件
	D登记条件 map[string]string `link:"条件"`

	// 符合条件时，商店出现在页面导航
	// 场景：等级限制
	// 场景：不同职业显示不同的道具
	// @alias 显示条件
	X显示条件 map[string]string `link:"条件"`

	// 场景：某些活动需要预热，在活动开始前就能看到活动页面
	// @alias 上架条件
	S上架条件 map[string]string `link:"条件"`

	// 场景：排行榜活动结束后，需要多挂一天，让玩家查看结果
	// @alias 下架条件
	X下架条件 map[string]string `link:"条件"`

	// 活动开始时间
	// @alias 开始条件
	K开始条件 map[string]string `link:"条件"`
	// 活动结束时间，进行活动的结算
	// @alias 结束条件
	J结束条件 map[string]string `link:"条件"`
	// 功能开始时执行
	// 场景：新年活动，使游戏服获得增益增益[击杀指定怪物有几率可掉落福字]
	// @alias 开始执行
	K开始执行 string `link:"执行"`
	// 功能结束时执行
	// 场景：新年活动结束后，删除增益增益
	// @alias 结束执行
	J结束执行 string `link:"执行"`
	// @alias 重置条件
	C重置条件 map[string]string `link:"条件"`
	// @alias 页面
	Y页面 *S功能页面

	// @alias 排行榜
	P排行榜 string `link:"排行榜"`
}

type S功能页面 struct {

	// @alias 导航位置
	D导航位置 G功能页面导航位置

	// 路由根据导航位置和导航路径组成
	// @alias 导航路径
	D导航路径 string

	// @alias 导航优先级
	D导航优先级 int
}

// todo: 独立出来，作为系统配置一部分
// @schema_export --ident=schema --json --config=功能
// @schema_go
// @cache_go
// @cache_ts
// @alias 功能_战斗
type B功能_战斗 struct {
	B功能
}

// todo: 独立出来，作为系统配置一部分
// @schema_export --ident=schema --json --config=功能
// @schema_go
// @cache_go
// @cache_ts
// @alias 功能_聊天
type B功能_聊天 struct {
	B功能
}

// todo: 独立出来，作为系统配置一部分
// @schema_export --ident=schema --json --config=功能
// @schema_go
// @cache_go
// @cache_ts
// @alias 功能_好友
type B功能_好友 struct {
	B功能
}

// todo: 独立出来，作为系统配置一部分
// @schema_export --ident=schema --json --config=功能
// @schema_go
// @cache_go
// @cache_ts
// @alias 功能_邮件
type B功能_邮件 struct {
	B功能
}

// todo: 功能并入商店?
// @schema_export --ident=schema --json --config=功能
// @schema_go
// @cache_go
// @cache_ts
// @alias 功能_拍卖行
type B功能_拍卖行 struct {
	B功能
}

// todo: 独立出来，作为系统配置一部分
// @schema_export --ident=schema --json --config=功能
// @schema_go
// @cache_go
// @cache_ts
// @alias 功能_国战
type B功能_国战 struct {
	B功能
}

// @schema_export --ident=schema --json --config=功能
// @schema_go
// @cache_go
// @cache_ts
// @alias 功能_竞技
type B功能_竞技 struct {
	B功能
}

type S功能执行信息 struct {
	// @alias 执行
	X执行 string `link:"执行"`

	// @alias 分类
	F分类 map[string]string
}

type G功能开启状态 int

const (
	G功能开启状态_启动 G功能开启状态 = iota
	//
	G功能开启状态_关闭
)

type G功能命令_执行 string

const (
	G功能命令_执行_使用 G功能命令_执行 = "使用"
)

// @schema_go
// @cache_go
// @cache_ts
// @alias 功能标旗
type G功能标旗 int

const (
	// 如果功能需要通过后台关闭
	G功能标旗_可关闭 G功能标旗 = iota

	// 增加功能
	// - 只需要增加功能项，角色登陆时，自动更新数据
	// - 增加功能需要重启服务器
	//
	// 删除功能项后，功能不再起效，但数据库中仍然存在功能保存的数据
	// 如果需要同时删除数据，需要在后台主动进行操作
	// 目前有两种方案：
	// 1. 创建全局/指定服务器的删除功能任务，玩家登陆时执行任务,删除功能数据。
	//   - 此方式需要一直存在，否则一些很久没有登陆的玩家的数据，没法删除
	//   - 此方式容易导致任务堆积，删除功能的任务不会很多
	//   - 此方式逻辑复杂，不考虑
	//
	// 2. 直接操纵数据库，删除功能数据
	//   - 这种方式在百万量级以上玩家数的情况下，数据库承受很大的压力
	//   - 需要考虑在线玩家的情景，或者只在停机维护的情况下执行
	//   - 目前使用此方式，在停机维护的情况下执行
	// 场景：某个功能出现了问题想临时关闭
	// todo: 在数据库保存功能备案(类似活动备案的做法)，就能通过后台设置开启关闭
	G功能标旗_禁用

	//
	G功能标旗_通知邮件
)

// 视图提供的导航位置，由客户端决定
// @schema_go
// @cache_go
// @cache_ts
// @alias 功能页面导航位置
type G功能页面导航位置 int

const (
	G功能页面导航位置_未知 G功能页面导航位置 = iota
	G功能页面导航位置_主界面左导航
	G功能页面导航位置_活动页面二级导航
	G功能页面导航位置_福利中心一级导航
)
